implement Encodable for Dependency
authorAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 7 Dec 2015 18:42:15 +0000 (21:42 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 7 Dec 2015 18:42:15 +0000 (21:42 +0300)
SerializedDependency can be a private implementation detail now.

src/cargo/core/dependency.rs
src/cargo/core/manifest.rs
src/cargo/core/package.rs

index aa74490fef34eca36ec060cb924b60b611c9fc6c..1788a1fb78e80343298b569c8bcfe98a81c2cb0d 100644 (file)
@@ -1,4 +1,5 @@
 use semver::VersionReq;
+use rustc_serialize::{Encoder, Encodable};
 
 use core::{SourceId, Summary, PackageId};
 use std::rc::Rc;
@@ -30,6 +31,22 @@ pub struct Dependency {
     inner: Rc<DependencyInner>,
 }
 
+
+#[derive(RustcEncodable)]
+struct SerializedDependency {
+    name: String,
+    req: String
+}
+
+impl Encodable for Dependency {
+    fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
+        SerializedDependency {
+            name: self.name().to_string(),
+            req: self.version_req().to_string()
+        }.encode(s)
+    }
+}
+
 #[derive(PartialEq, Clone, Debug, Copy)]
 pub enum Kind {
     Normal,
@@ -219,17 +236,3 @@ impl Dependency {
     }
 }
 
-#[derive(PartialEq,Clone,RustcEncodable)]
-pub struct SerializedDependency {
-    name: String,
-    req: String
-}
-
-impl SerializedDependency {
-    pub fn from_dependency(dep: &Dependency) -> SerializedDependency {
-        SerializedDependency {
-            name: dep.name().to_string(),
-            req: dep.version_req().to_string()
-        }
-    }
-}
index 4f366ae73fcf96d43f5b47ec43f87bb23f55606d..28a494eb957b9952444d4111f20e3bbe00add105 100644 (file)
@@ -3,11 +3,10 @@ use std::fmt;
 use std::path::{PathBuf, Path};
 
 use semver::Version;
-use rustc_serialize::{Encoder,Encodable};
+use rustc_serialize::{Encoder, Encodable};
 
 use core::{Dependency, PackageId, Summary};
 use core::package_id::Metadata;
-use core::dependency::SerializedDependency;
 use util::{CargoResult, human};
 
 /// Contains all the information about a package, as loaded from a Cargo.toml.
@@ -45,10 +44,10 @@ pub struct ManifestMetadata {
 }
 
 #[derive(RustcEncodable)]
-struct SerializedManifest {
+struct SerializedManifest<'a> {
     name: String,
     version: String,
-    dependencies: Vec<SerializedDependency>,
+    dependencies: &'a [Dependency],
     targets: Vec<Target>,
 }
 
@@ -57,9 +56,7 @@ impl Encodable for Manifest {
         SerializedManifest {
             name: self.summary.name().to_string(),
             version: self.summary.version().to_string(),
-            dependencies: self.summary.dependencies().iter().map(|d| {
-                SerializedDependency::from_dependency(d)
-            }).collect(),
+            dependencies: self.summary.dependencies(),
             targets: self.targets.clone(),
         }.encode(s)
     }
index 34855c2f8974166012bb9fab4977ab69afbead9d..c147a224c62de27a0702cbe19390e56ba7f3e4c4 100644 (file)
@@ -6,7 +6,6 @@ use semver::Version;
 
 use core::{Dependency, Manifest, PackageId, SourceId, Registry, Target, Summary, Metadata};
 use ops;
-use core::dependency::SerializedDependency;
 use util::{CargoResult, graph, Config};
 use rustc_serialize::{Encoder,Encodable};
 use core::source::Source;
@@ -24,10 +23,10 @@ pub struct Package {
 }
 
 #[derive(RustcEncodable)]
-struct SerializedPackage {
+struct SerializedPackage<'a> {
     name: String,
     version: String,
-    dependencies: Vec<SerializedDependency>,
+    dependencies: &'a [Dependency],
     targets: Vec<Target>,
     manifest_path: String,
 }
@@ -41,9 +40,7 @@ impl Encodable for Package {
         SerializedPackage {
             name: package_id.name().to_string(),
             version: package_id.version().to_string(),
-            dependencies: summary.dependencies().iter().map(|d| {
-                SerializedDependency::from_dependency(d)
-            }).collect(),
+            dependencies: summary.dependencies(),
             targets: manifest.targets().to_vec(),
             manifest_path: self.manifest_path.display().to_string()
         }.encode(s)